// 创建redux 仓库

// 01: 引入 创建redux 仓库的方法
import { legacy_createStore as createStore } from 'redux';

// 02: 定义初始仓库数据
const defaultState = {
    count: 0
}

// 03: 定义reducer 函数
// reducer的作用用来修改state仓库数据的, 注意面试的时候, 一般面试官将reducer 称之为纯函数
// 纯函数概念: 函数的返回值只由参数决定, 并且参数不能修改
// 例如  const abc = (num)=>{return num*2} 为纯函数
// const abc1 = (num)=>{return num*2+math.random()} 不是纯函数,不纯
// reducer函数触发时间: 初始化执行, 每次页面派发actions 再执行
function reducer(state = defaultState, actions) {
    //参数1: state为 仓库中的初始数据
    //参数2: actions 接收页面中派发任务, 然后根据该任务修改state数据
    //actions 为一个对象结构, 该对象有一个属性 type: 根据该type 属性, 确定怎么修改数据
    // 如: {type:'+',payload}  payload 为可选属性,type为必有属性
    // console.log('actions', actions);
    if (actions.type == '+') {
        // 注意: return 的返回值替换掉了 defaultState, 注意是替换,不是合并
        return {
            count: state.count + actions.payload
        }
    }
    // 当没有满足if条件的情况. 则返回默认原state
    return state
};

// 04: 创建store 仓库
const store = createStore(
    reducer,
    // 如下代码是为了方便在chrome 中调试redux用的, 配个redux-devtools 工具使用, 可以不用写
    window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__()
);

// 05: 导出仓库
export default store







